django 视图函数
[toc]
3.视图函数
3.1 request对象
request.path #request.path当前请求路径
request.method #当前请求方法(get,post...)
request.GET #获取所有get请求携带过来的数据
request.POST #获取所有post请求携带过来的数据
request.body #获取所有post请求携带过来的数据的原始格式
3.2 视图函数使用小示例
urls文件
urlpatterns = [
url(r'^admin/', admin.site.urls),
#编写一个login登陆视图文件
url(r'^login/', views.login),
]
views文件
from django.shortcuts import render,HttpResponse
def login(request):
if request.method == 'GET':
return render(request,'login.html')
else:
uname = request.POST.get('username')
pwd = request.POST.get('password')
if uname == 'admin' and pwd == 'admin':
return HttpResponse('登陆成功!')
else:
return HttpResponse('登陆失败!!!')
html文件
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<form action="" method="post">
{#<form action="">#}
用户名:<input type="text" name="username">
密码:<input type="password" name="password">
<input type="submit" value="登陆">
</form>
</body>
</html>
为了验证post请求,注释settings文件中的一行
Django项目下同名目录中的settings文件,48行
MIDDLEWARE = [
'django.middleware.security.SecurityMiddleware',
'django.contrib.sessions.middleware.SessionMiddleware',
'django.middleware.common.CommonMiddleware',
# 'django.middleware.csrf.CsrfViewMiddleware',
'django.contrib.auth.middleware.AuthenticationMiddleware',
'django.contrib.messages.middleware.MessageMiddleware',
'django.middleware.clickjacking.XFrameOptionsMiddleware',
]
浏览器访问
错误的示例
urls文件
def login(request):
if request.method == 'POST':
return render(request,'login.html')
else:
uname = request.GET.get('username')
pwd = request.GET.get('password')
if uname == 'admin' and pwd == 'admin':
return HttpResponse('登陆成功!')
else:
return HttpResponse('登陆失败!!!')
html文件
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
{#<这里指定提交请求方法为post>#}
<form action="" method="post">
用户名:<input type="text" name="username">
密码:<input type="password" name="password">
<input type="submit" value="登陆">
</form>
</body>
</html>
为了验证post请求,注释settings文件中的一行
Django项目下同名目录中的settings文件,48行
MIDDLEWARE = [
'django.middleware.security.SecurityMiddleware',
'django.contrib.sessions.middleware.SessionMiddleware',
'django.middleware.common.CommonMiddleware',
# 'django.middleware.csrf.CsrfViewMiddleware',
'django.contrib.auth.middleware.AuthenticationMiddleware',
'django.contrib.messages.middleware.MessageMiddleware',
'django.middleware.clickjacking.XFrameOptionsMiddleware',
]
按照之前的理解应该是会返回登陆界面,因为我login.html文件中form表单写的请求方法是post,而views视图文件中的逻辑判断是如果请求是post则返回登陆界面,但是实际情况并不是这样
为什么会直接返回登陆失败呢?
原因:当浏览器打开页面的时候,默认的方法就是GET,当点击登陆那一刻才会根据form表单中的method指定的请求类型而进行转变,但是现在直接就是GET方法,因此在login函数的判断中就直接跳到了第一个else后面,但是此时根本就没有用户登陆界面出现,所以就无法获取用户名和密码,所以会直接提示登陆失败!!!